#!/usr/bin/env node

const fs = require('fs');
const path = require('path');

/**
 * 完全清理所有日志文件脚本
 * 开发模式专用 - 删除所有日志文件和目录
 */

const logsDir = path.join(__dirname, '../logs');

function clearAllLogs() {
  console.log('🧹 [DEV] 开始清理所有日志文件...');

  if (!fs.existsSync(logsDir)) {
    console.log('📁 日志目录不存在，无需清理');
    return;
  }

  try {
    const stats = removeAllLogs(logsDir);
    console.log('✅ 所有日志文件清理完成！');
    console.log(`📊 统计: 删除 ${stats.deletedFiles} 个文件，删除 ${stats.deletedDirs} 个目录，释放空间 ${formatBytes(stats.freedSpace)}`);
  } catch (error) {
    console.error('❌ 清理日志文件时出错:', error.message);
    // 开发模式下不退出进程，继续启动应用
    console.log('⚠️  清理失败但继续启动应用...');
  }
}

/**
 * 递归删除所有日志文件和目录
 */
function removeAllLogs(dirPath) {
  const stats = {
    deletedFiles: 0,
    deletedDirs: 0,
    freedSpace: 0
  };

  function removeDirectory(currentPath) {
    if (!fs.existsSync(currentPath)) {
      return;
    }

    const files = fs.readdirSync(currentPath);

    files.forEach(file => {
      const filePath = path.join(currentPath, file);
      const stat = fs.statSync(filePath);

      if (stat.isDirectory()) {
        // 递归处理子目录
        removeDirectory(filePath);
        // 删除空目录
        try {
          fs.rmdirSync(filePath);
          stats.deletedDirs++;
          console.log(`🗂️  删除目录: ${path.relative(logsDir, filePath)}`);
        } catch (err) {
          // 目录可能不为空或有权限问题，忽略
        }
      } else if (stat.isFile()) {
        // 删除所有文件（不仅仅是.log文件）
        try {
          const fileSize = stat.size;
          fs.unlinkSync(filePath);
          stats.deletedFiles++;
          stats.freedSpace += fileSize;
          console.log(`🗑️  删除文件: ${path.relative(logsDir, filePath)} (${formatBytes(fileSize)})`);
        } catch (err) {
          console.warn(`⚠️  删除文件失败: ${file}`, err.message);
        }
      }
    });
  }

  removeDirectory(dirPath);

  // 最后尝试删除logs根目录下的文件
  try {
    const rootFiles = fs.readdirSync(dirPath);
    rootFiles.forEach(file => {
      const filePath = path.join(dirPath, file);
      const stat = fs.statSync(filePath);
      if (stat.isFile()) {
        const fileSize = stat.size;
        fs.unlinkSync(filePath);
        stats.deletedFiles++;
        stats.freedSpace += fileSize;
        console.log(`🗑️  删除根目录文件: ${file} (${formatBytes(fileSize)})`);
      }
    });
  } catch (err) {
    // 忽略错误
  }

  return stats;
}

/**
 * 格式化字节数
 */
function formatBytes(bytes) {
  if (bytes === 0) return '0 Bytes';

  const k = 1024;
  const sizes = ['Bytes', 'KB', 'MB', 'GB'];
  const i = Math.floor(Math.log(bytes) / Math.log(k));

  return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
}

// 如果直接运行此脚本
if (require.main === module) {
  clearAllLogs();
}

module.exports = clearAllLogs;
